
package com.viweb.storemanager.temp;

import java.util.Stack;

public class NumberToString {
        /*--------------------------------------------------------------------------
         *Ham doc so,theo quy tac tieng viet,ho tro doc so thap phan
         *Luu y:Theo quy tac tieng viet,nhung so theo sau dau phat se doc tung so mot
         *  	Nhung so dung truoc dau phay se doc theo quy tac thong thuong
         *Giai thuat:
         *
         *------------------------------------------------------------------------*/
    public String convertNumToString(StringBuffer strNumber){
        // thiet lap cac bien cho ham
        String[] nameUnit = {"", " ngàn ", " triệu ", " tỷ ", " ngàn ", " triệu ", " tỷ "};
        String[] nameNumber = {
            "", " một ", " hai ",
            " ba ", " bốn ", " năm ",
            " sáu ", " bảy ", " tám ", " chín "};
        
        // Stack chua du lieu se xuar ra man hinh theo co che LIFO
        Stack skVoice = new Stack();
        strNumber = strNumber.reverse();
        // 0 la don vi, 1 la hang muo`i, 2 la hang tram
        int unit = 0;
        // dem don vi
        int countUnit = 0;
        
        /*
         *
         * Loop, chay toan bo chuoi va doc tung so mot
         *
         */
        for (int x = 0; x < strNumber.length(); x++) {
            int so = Integer.parseInt("" + strNumber.charAt(x) );
            
            // them ngay chu~ don vi truoc ha`ng don vi
            if (unit == 0) {
                skVoice.push(nameUnit[countUnit]);
                countUnit++;
            }
            
            // Xet don vi cua so'
            switch (unit) {
                case 0:// hang don vi
                    switch (so) {
                        case 0:
                            // thay so 0 = @ cho de xu li
                            skVoice.push("@");
                            break;
                        default:
                            skVoice.push(nameNumber[so]);
                            break;
                    }
                    break;
                case 1:// hang chuc
                    switch (so) {
                        case 0:
                            // neu truoc no la so 0 thi ta se khong doc (ki hieu la @ )
                            if (skVoice.empty() == false && (String) skVoice.elementAt(skVoice.size() - 1) != "@")
                                skVoice.push(" linh ");
                            break;
                        case 1:
                            // Nếu trước đó là số 5 thì ta sẽ đọc là "lăm"
                            if (skVoice.empty() == false && (String) skVoice.elementAt(skVoice.size() - 1) == " năm ") {
                                skVoice.set(skVoice.size() - 1, " lăm ");
                            }
                            skVoice.push("mười");
                            break;
                        default:
                            // Nếu trước đó là số 1 thì ta sẽ đọc là "mốt"
                            if (skVoice.empty() == false && (String) skVoice.elementAt(skVoice.size() - 1) == " một ") {
                                skVoice.set(skVoice.size() - 1, " mốt ");
                            // Nếu trước đó là số 5 thì ta sẽ đọc là "lăm"
                            } else if (skVoice.empty() == false && (String) skVoice.elementAt(skVoice.size() - 1) == " năm ") {
                                skVoice.set(skVoice.size() - 1, " lăm ");
                            }
                            
                            skVoice.push(nameNumber[so] + "mươi");
                    }
                    break;
                case 2:// hang tram
                    switch (so){
                        case 0:
                            // Neu truoc no khong co hang don vi,thi no se khong doc
                            if (skVoice.empty() == false && ((String) skVoice.elementAt(skVoice.size() - 1)).length() >= 5)
                                skVoice.push(" không trăm ");
                            break;
                        default:
                            skVoice.push(nameNumber[so] + " trăm ");
                    }
                    
                    if (skVoice.empty() == false) {
                        // Kiem tra xem neu hang tram khong duoc doc,thi no se xoa chu~ don vi (ngan,trieu,ty)
                        String strRemove = (String) skVoice.elementAt(skVoice.size() - 1);
                        if (strRemove== "@" || strRemove== "@") {
                            skVoice.remove(skVoice.size() - 2);
                        }
                    }
                    break;
            }
            
            unit++;
            if (unit == 3) {
                unit = 0; // da kiem tra het 3 hang don vi,chuc,tram
            }
        }
        
        String numString = "";
        int size = skVoice.size();
        
        for (int x = 0; x < size; x++) {
            String strOut = (String) skVoice.pop();
            if (strOut!="@") {
                numString += strOut;
            }
        }
        
        return numString;
    }
}
